Taller 3

Análisis Estadístico de Datos en Salud

PFC 2023 -– IETSI, EsSalud
Autores/as

Percy Soto-Becerra

Anthony Romero

Fecha de publicación

09-06-2023

1 Introducción

En este tercer taller del curso revisaremos las funciones básicas del paquete Dplyr de Tidyverse para manejo y preprocesamiento de datos con R.

1.1 Hoja de referencia (cheatsheet) de Dplyr

2 Repasemos las funciones más importantes de Dplyr

Función que utilizamos para…

  • … elegir una o más filas específicas:

  • … cambiarle el nombre a una variable (columna):

  • … crear una variable:

  • … elegir una o más columnas específicas:

  • … resumir los datos calculando estadísticas (media, suma, min, max, etc):

  • … agrupar filas de un dataframe según una o más variables:

  • … ordenar filas de un dataframe según una o más variables:

  • … ordenar o cambiar de posición una o más columnas:

3 Recordar

La sintaxis general de las funciones en R sigue esta lógica: nombre_de_la_función( data, argumento(s) ).

Omitir mayúsculas, tildes, espacios o cualquier caracter especial.

4 Ahora te presentamos a los “pingüinos de Palmer”

Palmerpenguins es una base de datos elaborado y publicado por la Dra. Kristen Gorman y sus colegas del sitio de Investigación Ecológica a Largo Plazo de la Estación Palmer (Palmer LTER) en la Antártida. Estos datos se publicaron originalmente en PLoS ONE. Puedes obtener más información sobre este paquete aquí.

Para utilizar esta data, debemos instalar el paquete palmerpenguins desde CRAN usando este código: install.packages("palmerpenguins").

En esta base de datos se incluyeron a 3 especies de pingüinos: Adelia, Barbijo y Papúa

Además, hay 8 variables:

  • specie: indica la especie de cada pingüino (Adelia, Barbijo y Paúa)
  • island: indica la isla donde se observó (en el Archipiélago Palmer o Antártida)
  • bill_length_mm: indica la longitud de la cresta dorsal del pico del pingüino (en mm)
  • bill_depth_mm: indica la profundidad del pico del pingüino (en mm)
  • flipper_length_mm: indica la longitud de la aleta del pingüino (en mm)
  • body_mass_g: indica la masa corporal del pingüino (en g)
  • sex: indica el sexo del pingüino (macho o hembra)
  • year: indica el año del estudio (2007, 2008 o 2009)

Démosle un vistazo a la data:

penguins %>%    # Data 
  head(10) %>%  # Mostrar las 10 primeras filas de la data
  gt()          # Convertir a formato gt
species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex year
Adelie Torgersen 39.1 18.7 181 3750 male 2007
Adelie Torgersen 39.5 17.4 186 3800 female 2007
Adelie Torgersen 40.3 18.0 195 3250 female 2007
Adelie Torgersen NA NA NA NA NA 2007
Adelie Torgersen 36.7 19.3 193 3450 female 2007
Adelie Torgersen 39.3 20.6 190 3650 male 2007
Adelie Torgersen 38.9 17.8 181 3625 female 2007
Adelie Torgersen 39.2 19.6 195 4675 male 2007
Adelie Torgersen 34.1 18.1 193 3475 NA 2007
Adelie Torgersen 42.0 20.2 190 4250 NA 2007

5 Ejercicios con Dplyr

Ejercicio 1

Filtrar la data para mostrar únicamente a los pingüinos de la especie “Chinstrap” (Renderizar el chunk de código)

penguins %>% 
  filter(species == "Chinstrap")
# A tibble: 68 × 8
   species   island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
   <fct>     <fct>           <dbl>         <dbl>             <int>       <int>
 1 Chinstrap Dream            46.5          17.9               192        3500
 2 Chinstrap Dream            50            19.5               196        3900
 3 Chinstrap Dream            51.3          19.2               193        3650
 4 Chinstrap Dream            45.4          18.7               188        3525
 5 Chinstrap Dream            52.7          19.8               197        3725
 6 Chinstrap Dream            45.2          17.8               198        3950
 7 Chinstrap Dream            46.1          18.2               178        3250
 8 Chinstrap Dream            51.3          18.2               197        3750
 9 Chinstrap Dream            46            18.9               195        4150
10 Chinstrap Dream            51.3          19.9               198        3700
# ℹ 58 more rows
# ℹ 2 more variables: sex <fct>, year <int>

Ejercicio 2

Filtrar la data para mostrar únicamente a los pingüinos de las especies “Chinstrap” y “Gentoo” (Renderizar el chunk de código)

penguins %>% 
  filter(species == "Chinstrap" | species == "Gentoo")
# A tibble: 192 × 8
   species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
   <fct>   <fct>           <dbl>         <dbl>             <int>       <int>
 1 Gentoo  Biscoe           46.1          13.2               211        4500
 2 Gentoo  Biscoe           50            16.3               230        5700
 3 Gentoo  Biscoe           48.7          14.1               210        4450
 4 Gentoo  Biscoe           50            15.2               218        5700
 5 Gentoo  Biscoe           47.6          14.5               215        5400
 6 Gentoo  Biscoe           46.5          13.5               210        4550
 7 Gentoo  Biscoe           45.4          14.6               211        4800
 8 Gentoo  Biscoe           46.7          15.3               219        5200
 9 Gentoo  Biscoe           43.3          13.4               209        4400
10 Gentoo  Biscoe           46.8          15.4               215        5150
# ℹ 182 more rows
# ℹ 2 more variables: sex <fct>, year <int>

Ejercicio 3

Filtrar la data para mostrar únicamente a los pingüinos de la especie “Adelie” que sean de la isla “Dream” (Renderizar el chunk de código)

penguins %>%
  filter(species == "Adelie", island == "Dream")
# A tibble: 56 × 8
   species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
   <fct>   <fct>           <dbl>         <dbl>             <int>       <int>
 1 Adelie  Dream            39.5          16.7               178        3250
 2 Adelie  Dream            37.2          18.1               178        3900
 3 Adelie  Dream            39.5          17.8               188        3300
 4 Adelie  Dream            40.9          18.9               184        3900
 5 Adelie  Dream            36.4          17                 195        3325
 6 Adelie  Dream            39.2          21.1               196        4150
 7 Adelie  Dream            38.8          20                 190        3950
 8 Adelie  Dream            42.2          18.5               180        3550
 9 Adelie  Dream            37.6          19.3               181        3300
10 Adelie  Dream            39.8          19.1               184        4650
# ℹ 46 more rows
# ℹ 2 more variables: sex <fct>, year <int>

Ejercicio 4

Excluir a todos los pingüinos de la especie “Chinstrap” de la data (Renderizar el chunk de código)

penguins %>%
  filter(species != "Chinstrap")
# A tibble: 276 × 8
   species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
   <fct>   <fct>              <dbl>         <dbl>             <int>       <int>
 1 Adelie  Torgersen           39.1          18.7               181        3750
 2 Adelie  Torgersen           39.5          17.4               186        3800
 3 Adelie  Torgersen           40.3          18                 195        3250
 4 Adelie  Torgersen           NA            NA                  NA          NA
 5 Adelie  Torgersen           36.7          19.3               193        3450
 6 Adelie  Torgersen           39.3          20.6               190        3650
 7 Adelie  Torgersen           38.9          17.8               181        3625
 8 Adelie  Torgersen           39.2          19.6               195        4675
 9 Adelie  Torgersen           34.1          18.1               193        3475
10 Adelie  Torgersen           42            20.2               190        4250
# ℹ 266 more rows
# ℹ 2 more variables: sex <fct>, year <int>

Ejercicio 5

Filtrar la data para mostrar únicamente a los pingüinos cuya aleta tenga una longitud mayor a 200mm (Renderizar el chunk de código)

penguins %>%
  filter(flipper_length_mm > 200)
# A tibble: 148 × 8
   species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
   <fct>   <fct>              <dbl>         <dbl>             <int>       <int>
 1 Adelie  Dream               35.7          18                 202        3550
 2 Adelie  Dream               41.1          18.1               205        4300
 3 Adelie  Dream               40.8          18.9               208        4300
 4 Adelie  Biscoe              41            20                 203        4725
 5 Adelie  Torgersen           41.4          18.5               202        3875
 6 Adelie  Torgersen           44.1          18                 210        4000
 7 Adelie  Dream               41.5          18.5               201        4000
 8 Gentoo  Biscoe              46.1          13.2               211        4500
 9 Gentoo  Biscoe              50            16.3               230        5700
10 Gentoo  Biscoe              48.7          14.1               210        4450
# ℹ 138 more rows
# ℹ 2 more variables: sex <fct>, year <int>

Ejercicio 6

Filtrar la data para mostrar únicamente a los pingüinos cuya masa corporal sea, como máximo, 2900g (Renderizar el chunk de código)

penguins %>%
  filter(body_mass_g <= 2900)
# A tibble: 7 × 8
  species   island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
  <fct>     <fct>              <dbl>         <dbl>             <int>       <int>
1 Adelie    Biscoe              34.5          18.1               187        2900
2 Adelie    Biscoe              36.5          16.6               181        2850
3 Adelie    Biscoe              36.4          17.1               184        2850
4 Adelie    Dream               33.1          16.1               178        2900
5 Adelie    Torgersen           38.6          17                 188        2900
6 Chinstrap Dream               43.2          16.6               187        2900
7 Chinstrap Dream               46.9          16.6               192        2700
# ℹ 2 more variables: sex <fct>, year <int>

Ejercicio 7

Seleccione las variables que contengan “length” en el nombre (Renderizar el chunk de código)

penguins %>%
  select(contains("length"))
# A tibble: 344 × 2
   bill_length_mm flipper_length_mm
            <dbl>             <int>
 1           39.1               181
 2           39.5               186
 3           40.3               195
 4           NA                  NA
 5           36.7               193
 6           39.3               190
 7           38.9               181
 8           39.2               195
 9           34.1               193
10           42                 190
# ℹ 334 more rows

Ejercicio 8

Seleccione las variables que contengan “length” en el nombre o inicien con “bill” (Renderizar el chunk de código)

penguins %>%
  select(contains("length") | starts_with("bill"))
# A tibble: 344 × 3
   bill_length_mm flipper_length_mm bill_depth_mm
            <dbl>             <int>         <dbl>
 1           39.1               181          18.7
 2           39.5               186          17.4
 3           40.3               195          18  
 4           NA                  NA          NA  
 5           36.7               193          19.3
 6           39.3               190          20.6
 7           38.9               181          17.8
 8           39.2               195          19.6
 9           34.1               193          18.1
10           42                 190          20.2
# ℹ 334 more rows

Ejercicio 9

Filtrar la data para mostrar únicamente a los pingüinos de la especie “Adelie” cuya cresta dorsal del pico sea mayor a 40mm (Renderizar el chunk de código)

penguins %>%
  filter(species == "Adelie", bill_length_mm > 40)
# A tibble: 51 × 8
   species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
   <fct>   <fct>              <dbl>         <dbl>             <int>       <int>
 1 Adelie  Torgersen           40.3          18                 195        3250
 2 Adelie  Torgersen           42            20.2               190        4250
 3 Adelie  Torgersen           41.1          17.6               182        3200
 4 Adelie  Torgersen           42.5          20.7               197        4500
 5 Adelie  Torgersen           46            21.5               194        4200
 6 Adelie  Biscoe              40.6          18.6               183        3550
 7 Adelie  Biscoe              40.5          17.9               187        3200
 8 Adelie  Biscoe              40.5          18.9               180        3950
 9 Adelie  Dream               40.9          18.9               184        3900
10 Adelie  Dream               42.2          18.5               180        3550
# ℹ 41 more rows
# ℹ 2 more variables: sex <fct>, year <int>

Ejercicio 10

Seleccione el año, isla y especie de la data (Renderizar el chunk de código)

penguins %>%
  select(year, island, species)
# A tibble: 344 × 3
    year island    species
   <int> <fct>     <fct>  
 1  2007 Torgersen Adelie 
 2  2007 Torgersen Adelie 
 3  2007 Torgersen Adelie 
 4  2007 Torgersen Adelie 
 5  2007 Torgersen Adelie 
 6  2007 Torgersen Adelie 
 7  2007 Torgersen Adelie 
 8  2007 Torgersen Adelie 
 9  2007 Torgersen Adelie 
10  2007 Torgersen Adelie 
# ℹ 334 more rows

Ejercicio 11

Seleccione las variables desde especies hasta masa corporal usando el operador “:” (Renderizar el chunk de código)

penguins %>%
  select(species:body_mass_g)
# A tibble: 344 × 6
   species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
   <fct>   <fct>              <dbl>         <dbl>             <int>       <int>
 1 Adelie  Torgersen           39.1          18.7               181        3750
 2 Adelie  Torgersen           39.5          17.4               186        3800
 3 Adelie  Torgersen           40.3          18                 195        3250
 4 Adelie  Torgersen           NA            NA                  NA          NA
 5 Adelie  Torgersen           36.7          19.3               193        3450
 6 Adelie  Torgersen           39.3          20.6               190        3650
 7 Adelie  Torgersen           38.9          17.8               181        3625
 8 Adelie  Torgersen           39.2          19.6               195        4675
 9 Adelie  Torgersen           34.1          18.1               193        3475
10 Adelie  Torgersen           42            20.2               190        4250
# ℹ 334 more rows

Ejercicio 12

Excluya la variable isla de la data (Renderizar el chunk de código)

penguins %>%
  select(-island)
# A tibble: 344 × 7
   species bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex   
   <fct>            <dbl>         <dbl>             <int>       <int> <fct> 
 1 Adelie            39.1          18.7               181        3750 male  
 2 Adelie            39.5          17.4               186        3800 female
 3 Adelie            40.3          18                 195        3250 female
 4 Adelie            NA            NA                  NA          NA <NA>  
 5 Adelie            36.7          19.3               193        3450 female
 6 Adelie            39.3          20.6               190        3650 male  
 7 Adelie            38.9          17.8               181        3625 female
 8 Adelie            39.2          19.6               195        4675 male  
 9 Adelie            34.1          18.1               193        3475 <NA>  
10 Adelie            42            20.2               190        4250 <NA>  
# ℹ 334 more rows
# ℹ 1 more variable: year <int>

Ejercicio 13

Seleccione las variables que inicien con “bill” (Renderizar el chunk de código)

penguins %>%
  select(starts_with("bill"))
# A tibble: 344 × 2
   bill_length_mm bill_depth_mm
            <dbl>         <dbl>
 1           39.1          18.7
 2           39.5          17.4
 3           40.3          18  
 4           NA            NA  
 5           36.7          19.3
 6           39.3          20.6
 7           38.9          17.8
 8           39.2          19.6
 9           34.1          18.1
10           42            20.2
# ℹ 334 more rows

Ejercicio 14

Se desea filtrar a todos pingüinos Gentoo con pico de mas de 15.5 mm de profundidad. Escriba el código para tal tarea. (Renderizar el chunk de código)

penguins %>%
  filter(species == "Gentoo", bill_depth_mm > 15.5)
# A tibble: 39 × 8
   species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
   <fct>   <fct>           <dbl>         <dbl>             <int>       <int>
 1 Gentoo  Biscoe           50            16.3               230        5700
 2 Gentoo  Biscoe           49            16.1               216        5550
 3 Gentoo  Biscoe           49.3          15.7               217        5850
 4 Gentoo  Biscoe           46.3          15.8               215        5050
 5 Gentoo  Biscoe           59.6          17                 230        6050
 6 Gentoo  Biscoe           48.4          16.3               220        5400
 7 Gentoo  Biscoe           44.4          17.3               219        5250
 8 Gentoo  Biscoe           48.7          15.7               208        5350
 9 Gentoo  Biscoe           49.6          16                 225        5700
10 Gentoo  Biscoe           50.5          15.9               222        5550
# ℹ 29 more rows
# ℹ 2 more variables: sex <fct>, year <int>

Ejercicio 15

Filtre a los pinguinos machos que fueron registrados en las islas “Biscoe” y “Dream”. (Renderizar el chunk de código)

penguins %>%
  filter(island %in% c("Dream","Biscoe"), sex == "male")
# A tibble: 145 × 8
   species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
   <fct>   <fct>           <dbl>         <dbl>             <int>       <int>
 1 Adelie  Biscoe           37.7          18.7               180        3600
 2 Adelie  Biscoe           38.2          18.1               185        3950
 3 Adelie  Biscoe           38.8          17.2               180        3800
 4 Adelie  Biscoe           40.6          18.6               183        3550
 5 Adelie  Biscoe           40.5          18.9               180        3950
 6 Adelie  Dream            37.2          18.1               178        3900
 7 Adelie  Dream            40.9          18.9               184        3900
 8 Adelie  Dream            39.2          21.1               196        4150
 9 Adelie  Dream            38.8          20                 190        3950
10 Adelie  Dream            39.8          19.1               184        4650
# ℹ 135 more rows
# ℹ 2 more variables: sex <fct>, year <int>

Ejercicio 16

Filter la data para mostrar a los pinguinos Adelie con una cresta dorsal de pico menor a 35mm que no sean machos. (Renderizar el chunk de código)

penguins %>%
  filter(sex == "female", species == "Adelie", bill_length_mm < 35)
# A tibble: 7 × 8
  species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
  <fct>   <fct>              <dbl>         <dbl>             <int>       <int>
1 Adelie  Torgersen           34.4          18.4               184        3325
2 Adelie  Biscoe              34.5          18.1               187        2900
3 Adelie  Torgersen           33.5          19                 190        3600
4 Adelie  Torgersen           34.6          17.2               189        3200
5 Adelie  Dream               34            17.1               185        3400
6 Adelie  Dream               33.1          16.1               178        2900
7 Adelie  Dream               32.1          15.5               188        3050
# ℹ 2 more variables: sex <fct>, year <int>

Ejercicio 17

Cree una variable que contenga a la masa corporal pero en kilogramos, llamela “body_mass_kg” y otra variable llamada “flipper_length_m” que contenga a la longitud de la aleta pero en metros (Renderizar el chunk de código)

penguins %>%
  mutate(body_mass_kg = body_mass_g / 1000,
         flipper_length_m = flipper_length_mm / 1000)
# A tibble: 344 × 10
   species island    bill_length_mm bill_depth_mm flipper_length_mm body_mass_g
   <fct>   <fct>              <dbl>         <dbl>             <int>       <int>
 1 Adelie  Torgersen           39.1          18.7               181        3750
 2 Adelie  Torgersen           39.5          17.4               186        3800
 3 Adelie  Torgersen           40.3          18                 195        3250
 4 Adelie  Torgersen           NA            NA                  NA          NA
 5 Adelie  Torgersen           36.7          19.3               193        3450
 6 Adelie  Torgersen           39.3          20.6               190        3650
 7 Adelie  Torgersen           38.9          17.8               181        3625
 8 Adelie  Torgersen           39.2          19.6               195        4675
 9 Adelie  Torgersen           34.1          18.1               193        3475
10 Adelie  Torgersen           42            20.2               190        4250
# ℹ 334 more rows
# ℹ 4 more variables: sex <fct>, year <int>, body_mass_kg <dbl>,
#   flipper_length_m <dbl>

Ejercicio 18

Seleccione a los pinguinos Gentoo y mantenga la isla de la que proviene, el sexo y la masa corporal (Renderizar el chunk de código)

penguins %>%
  filter(species == "Gentoo") %>%
  select(island, sex, body_mass_g)
# A tibble: 124 × 3
   island sex    body_mass_g
   <fct>  <fct>        <int>
 1 Biscoe female        4500
 2 Biscoe male          5700
 3 Biscoe female        4450
 4 Biscoe male          5700
 5 Biscoe male          5400
 6 Biscoe female        4550
 7 Biscoe female        4800
 8 Biscoe male          5200
 9 Biscoe female        4400
10 Biscoe male          5150
# ℹ 114 more rows

Ejercicio 19

Seleccione a los pinguinos machos con longitud de pico mayor a 200mm y mantenga a las variables que terminen con “mm” (Renderizar el chunk de código)

penguins %>%
  filter(sex == "male", flipper_length_mm > 200) %>%
  select(ends_with("mm"))
# A tibble: 84 × 3
   bill_length_mm bill_depth_mm flipper_length_mm
            <dbl>         <dbl>             <int>
 1           41.1          18.1               205
 2           40.8          18.9               208
 3           41            20                 203
 4           41.4          18.5               202
 5           44.1          18                 210
 6           41.5          18.5               201
 7           50            16.3               230
 8           50            15.2               218
 9           47.6          14.5               215
10           46.7          15.3               219
# ℹ 74 more rows

Ejercicio 20

Cree una tabla con el promedio de la masa corporal de los pinguinos según especie (Renderizar el chunk de código)

penguins %>%
  group_by(species) %>%
  summarize(mass_promedio = mean(body_mass_g, na.rm = TRUE))
# A tibble: 3 × 2
  species   mass_promedio
  <fct>             <dbl>
1 Adelie            3701.
2 Chinstrap         3733.
3 Gentoo            5076.

Ejercicio 21

Repita el código de la pregunta 20, pero aplicado solo para los pinguinos machos de la especie Adelie (Renderizar el chunk de código)

penguins %>%
  filter(species == "Adelie", sex == "male") %>%
  group_by(species) %>%
  summarize(mass_promedio = mean(body_mass_g, na.rm = TRUE))
# A tibble: 1 × 2
  species mass_promedio
  <fct>           <dbl>
1 Adelie          4043.

Ejercicio de reflexión

Pregunta:

  • ¿Crees que importa si primero usamos el select() y luego el filter(), o viceversa?